package com.artconcurrency.chapter4;

/**
 * @ClassName com.artconcurrency.chapter4
 * Description: <类功能描述>. <br>
 * <p>
 *在Java中有两类线程：用户线程 (User Thread)、守护线程 (Daemon Thread)。
 *
 * 所谓守护 线程，是指在程序运行的时候在后台提供一种通用服务的线程，
 *  比如垃圾回收线程就是一个很称职的守护者，并且这种线程并不属于程序中不可或缺的部分。
 *  因此，当所有的非守护线程结束时，程序也就终止了，同时会杀死进程中的所有守护线程。
 *  反过来说，只要任何非守护线程还在运行，程序就不会终止。
 *
 * (1) thread.setDaemon(true)必须在thread.start()之前设置，否则会跑出一个IllegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。
 *
 * (2) 在Daemon线程中产生的新线程也是Daemon的。
 *
 * (3) 守护线程应该永远不去访问固有资源，如文件、数据库，因为它会在任何时候甚至在一个操作的中间发生中断。
 * </p>
 * @Author tree
 * @Date 2019-05-01 20:38
 * @Version 1.0
 */
public class Daemon {
    public static void main(String[] args) {
       Thread t =  new Thread(new DaemonRunner(),"DaemonRun");
       t.setDaemon(true);
       t.start();
    }

}
class DaemonRunner implements Runnable{
    @Override
    public void run() {
        try {
            SleepUtils.second(10);
        } finally {
            System.out.println("DaemonThread finally run.");
        }
    }
}
